جزوه · چالش‌های فصل اول: غیرفعال کردن دستور بازگشت به فهرست
📘 چالش‌های فصل اول غیرفعال کردن یک دستور
📅 تاریخ: ۱۹ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian

▍ مقدمه

گاهی اوقات ممکن است به دلایل امنیتی یا آموزشی، بخواهید دستوری خاص را غیرفعال کنید تا کاربر نتواند از آن استفاده کند. مثلاً غیرفعال کردن cd برای اینکه کاربر نتواند بین دایرکتوری‌ها جابجا شود.

⚠️ توجه:

غیرفعال کردن یک دستور، به خصوص cd، کاربر را محدود می‌کند و ممکن است تجربه کاربری را مختل کند. این کار بیشتر در محیط‌های آموزشی یا چالش‌های CTF استفاده می‌شود.

▍ روش‌های غیرفعال کردن دستور cd

• روش اول: استفاده از alias

با استفاده از alias می‌توانید cd را به دستور دیگری (مثلاً echo) متصل کنید.

┌──(ya3in㉿kali)-[~] └─$ alias cd="echo 'دستور cd غیرفعال است!'" └─$ cd / دستور cd غیرفعال است!

توضیح: با این کار، هر بار که کاربر cd را اجرا کند، پیام هشدار نمایش داده می‌شود.

💡 نکته:

این روش فقط برای جلسه فعلی معتبر است و پس از بستن ترمینال، cd به حالت عادی برمی‌گردد. برای دائمی کردن، alias را به ~/.zshrc اضافه کنید.

• روش دوم: تغییر مسیر دستور cd

می‌توانید فایل اجرایی cd را با یک اسکریپت جایگزین کنید.

┌──(ya3in㉿kali)-[~] └─$ sudo mv /usr/bin/cd /usr/bin/cd.bak └─$ sudo echo '#!/bin/bash' > /usr/bin/cd └─$ sudo echo 'echo "cd غیرفعال است"' >> /usr/bin/cd └─$ sudo chmod +x /usr/bin/cd

توضیح: فایل اصلی cd را تغییر نام می‌دهیم و یک اسکریپت جدید به جای آن قرار می‌دهیم.

⚠️ هشدار:

این روش نیاز به دسترسی روت (sudo) دارد و اگر اشتباه انجام شود، ممکن است سیستم شما دچار مشکل شود. همچنین cd یک دستور داخلی (built-in) است و فایل اجرایی جداگانه‌ای در /usr/bin ندارد! این روش فقط برای دستورات خارجی کار می‌کند.

• روش سوم: غیرفعال کردن در Zsh با disable

در Zsh، می‌توانید با دستور disable یک دستور داخلی را غیرفعال کنید.

┌──(ya3in㉿kali)-[~] └─$ disable cd └─$ cd / zsh: command not found: cd

توضیح: با disable cd، دستور cd به طور کامل غیرفعال می‌شود و خطای command not found نمایش داده می‌شود.

✅ فعال کردن مجدد:

برای فعال کردن مجدد cd از دستور enable cd استفاده کنید:

┌──(ya3in㉿kali)-[~] └─$ enable cd

• روش چهارم: حذف دستور cd از PATH

اگر cd یک دستور خارجی بود، می‌توانستید آن را از PATH حذف کنید. اما چون cd یک دستور داخلی (built-in) است، این روش کار نمی‌کند.

💡 تفاوت دستورات داخلی و خارجی:
  • دستورات داخلی (Built-in): مثل cd، echo، pwd که داخل خود شل ساخته شده‌اند و فایل جداگانه‌ای ندارند.
  • دستورات خارجی (External): مثل ls، grep، find که در /usr/bin یا /bin قرار دارند.

▍ جدول مقایسه روش‌ها

روش موقتی/دائمی نیاز به روت قابلیت بازگشت سطح سختی
alias موقتی (قابل دائمی کردن) ❌ خیر ✅ آسان (با unalias) ⭐ ساده
disable (Zsh) موقتی (تا پایان جلسه) ❌ خیر ✅ آسان (با enable) ⭐ ساده
تغییر فایل اجرایی دائمی ✅ بله ⚠️ متوسط (نیاز به restore) ⭐⭐ متوسط
حذف از PATH دائمی (برای دستورات خارجی) ✅ بله ⚠️ متوسط ⭐⭐ متوسط

▍ نکات امنیتی

🔒 نکات مهم:
  • غیرفعال کردن cd کاربر را محدود می‌کند و ممکن است باعث سردرگمی شود.
  • برای محیط‌های آموزشی یا چالش‌های CTF کاربرد دارد.
  • کاربران با دانش کافی می‌توانند با enable یا unalias آن را برگردانند.
  • برای محدودیت دائمی، باید تنظیمات را در فایل‌های شل (مثل ~/.zshrc) اعمال کنید.

▍ جمع‌بندی

بهترین روش برای غیرفعال کردن cd در Zsh، استفاده از دستور disable است زیرا:

┌──(ya3in㉿kali)-[~] └─$ disable cd # غیرفعال کردن cd └─$ enable cd # فعال کردن مجدد cd
✅ تمرین پیشنهادی:
  • با disable cd دستور cd را غیرفعال کنید و سعی کنید به دایرکتوری دیگری بروید.
  • با enable cd آن را مجدداً فعال کنید.
  • با alias یک پیام سفارشی به جای cd قرار دهید.
  • سعی کنید disable را روی دستور ls هم امتحان کنید.